package fr.upstlse.glre.client.administration;

import com.extjs.gxt.ui.client.Style.LayoutRegion;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;
import com.extjs.gxt.ui.client.widget.layout.FillLayout;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;

import fr.upstlse.glre.client.administration.component.Center;
import fr.upstlse.glre.client.administration.component.Header;
import fr.upstlse.glre.client.administration.component.Menu;
import fr.upstlse.glre.client.espacededie.AbstractEspaceDebie;
import fr.upstlse.glre.client.utilitaires.ControlerUtil;
import fr.upstlse.glre.client.vo.user.UserVOGWT;

/**
 * Créer le Viewport contenant les widgets de l'espace administrateur. Un objet
 * administrateur est unique (implémentation du design pattern Singleton)
 * 
 * @author michael
 * 
 */
public class EspaceAdministration extends AbstractEspaceDebie<UserVOGWT> {

	private static EspaceAdministration instance;

	protected EspaceAdministration() {
		super();
	}

	/**
	 * Crée une instance ou retourne l'instance existante de l'espace
	 * administrateur
	 * 
	 * @return
	 */
	public static EspaceAdministration getInstance() {
		if (instance == null) {
			instance = new EspaceAdministration();
		}

		return instance;
	}

	/**
	 * Appelé lors de la fermeture de l'espace administrateur. Tue le centre
	 * également.
	 */
	public static void killInstance() {
		Center.killInstance();
		instance = null;
	}

	public void getUserInformation(long pId) {
		ControlerUtil.getUserControlerServiceAsyncInstance().getUserById(pId,
				getUserInformationAsyncCallBack());
	}

	@Override
	protected void createComponents() {
		viewport.setData("layout", new FitLayout());
		viewport.setLayout(new BorderLayout());
		viewport.setBorders(false);

		BorderLayoutData lHeaderLayoutData = new BorderLayoutData(
				LayoutRegion.NORTH, 80);
		BorderLayoutData lMenuLayoutData = new BorderLayoutData(
				LayoutRegion.WEST, 200, 150, 300);
		ContentPanel lMenuPanel = new ContentPanel();
		lMenuPanel.setLayout(new FillLayout());
		lMenuPanel.setHeading("Navigation");
		Menu lMenu = new Menu();
		lMenu.initWidget();
		lMenuPanel.add(lMenu);
		
		ContentPanel lCenterPanel = new ContentPanel();
		lCenterPanel.setLayout(new FillLayout());
		lCenterPanel.setHeaderVisible(false);
		Center lCenter = Center.getInstance();
		lCenter.initWidget();
		lCenterPanel.add(lCenter);
		
		Header lHeader = new Header();
		lHeader.initWidget();

		viewport.add(lHeader, lHeaderLayoutData);
		viewport.add(lMenuPanel, lMenuLayoutData);
		viewport.add(lCenterPanel, new BorderLayoutData(LayoutRegion.CENTER));
	}
}
